<p>只有已赋予<code> RUNTIME </code>保留策略的注释才可以反射。其他的保留策略都返回false。</p>
<p>java注释有以下三种保留策略：</p>
<ul>
  <li> <code> RetentionPolicy.SOURCE </code>-这些注释在编译过程中会被删除，例如<code> @Override </code>，<code> @SuppressWarnings </code>。</li>
  <li> <code> RetentionPolicy.CLASS </code>-这些注释存在于已编译的类中，但未加载到运行时的JVM。这是默认设置。</li>
  <li> <code> RetentionPolicy.RUNTIME </code>-这些注释存在于类文件中，并已加载到JVM中。</li>
</ul>

<h2>不规范的代码示例</h2>
<pre>
Method m = String.class.getMethod("getBytes", new Class[] {int.class,
int.class, byte[].class, int.class});
if (m.isAnnotationPresent(Override.class)) {  //不合规；即使代码中存在@Override，也会返回false
</pre>